var coordsConvert = function () {
    var aa0 = -559428.099633526,
        aa1 = 0.00427380703415103,
        aa2 = 1.00026097711208,
        ee = 0.006739496742227,
        a = 6378137,
        L0 = 121,
        e = 0.00669437999013,
        bb0 = -3457310.48439697,
        bb1 = 1.00077691254491,
        bb2 = -0.00479269719054898;
    var B, L, LocalX, LocalY, gy, gx;

    var WGS84ToGauss = function (b, l) {
        var Ao, Bo, Co, D0, Eo, mCosB, B1, B2, pccm, pccn, pcct, pccr, ps, mgs1, mgs2, mgs3, mgs4, lx, x1, y1;
        Ao = (((((a * (1 - e)) * ((((1 + ((3 / 4) * e)) + (((45 / 64) * e) * e)) + ((((350 / 0x0200) * e) * e) * e)) + (((((11025 / 0x4000) * e) * e) * e) * e))) * 4) * Math.atan(1)) / 180);
        Bo = (((a * (1 - e)) * (((((3 / 4) * e) + (((60 / 64) * e) * e)) + ((((525 / 0x0200) * e) * e) * e)) + (((((17640 / 0x4000) * e) * e) * e) * e))) / 2);
        Co = (((a * (1 - e)) * (((((15 / 64) * e) * e) + ((((210 / 0x0200) * e) * e) * e)) + (((((8820 / 0x4000) * e) * e) * e) * e))) / 4);
        D0 = (((a * (1 - e)) * (((((35 / 0x0200) * e) * e) * e) + (((((2520 / 0x4000) * e) * e) * e) * e))) / 6);
        Eo = (((a * (1 - e)) * (((((315 / 0x4000) * e) * e) * e) * e)) / 8);
        lx = (l - L0);
        b = (((b * 4) * Math.atan(1)) / 180);
        pccm = ((((lx * Math.cos(b)) * 4) * Math.atan(1)) / 180);
        pccn = (a / Math.sqrt((1 - ((e * Math.sin(b)) * Math.sin(b)))));
        pcct = Math.tan(b);
        pccr = ((ee * Math.cos(b)) * Math.cos(b));
        ps = ((((((((Ao * b) * 180) / 4) / Math.atan(1)) - (Bo * Math.sin((b * 2)))) + (Co * Math.sin((b * 4)))) - (D0 * Math.sin((b * 6)))) + (Eo * Math.sin((b * 8))));
        mgs1 = ((((pccn * pcct) * pccm) * pccm) / 2);
        mgs2 = (((((((pccn * pcct) * pccm) * pccm) * pccm) * pccm) * (((5 - (pcct * pcct)) + (9 * pccr)) + ((4 * pccr) * pccr))) / 24);
        mgs3 = (((((((((pccn * pcct) * pccm) * pccm) * pccm) * pccm) * pccm) * pccm) * ((((61 - ((58 * pcct) * pcct)) + (((pcct * pcct) * pcct) * pcct)) + (270 * pccr)) - (((330 * pcct) * pcct) * pccr))) / 720);
        mgs4 = (((((((((((pccn * pcct) * pccm) * pccm) * pccm) * pccm) * pccm) * pccm) * pccm) * pccm) * (((1385 - ((3111 * pcct) * pcct)) + ((((543 * pcct) * pcct) * pcct) * pcct)) - (((((pcct * pcct) * pcct) * pcct) * pcct) * pcct))) / 40320);
        x1 = ((((ps + mgs1) + mgs2) + mgs3) + mgs4);
        mgs1 = ((pccn * pccm) + (((((((1 - (pcct * pcct)) + pccr) * pccn) * pccm) * pccm) * pccm) / 6));
        mgs2 = (((((((((((5 - ((18 * pcct) * pcct)) + (((pcct * pcct) * pcct) * pcct)) + (14 * pccr)) - (((58 * pccr) * pcct) * pcct)) * pccn) * pccm) * pccm) * pccm) * pccm) * pccm) / 120);
        mgs3 = ((((((((((((61 - ((479 * pcct) * pcct)) + ((((179 * pcct) * pcct) * pcct) * pcct)) - (((((pcct * pcct) * pcct) * pcct) * pcct) * pcct)) * pccn) * pccm) * pccm) * pccm) * pccm) * pccm) * pccm) * pccm) / 5040);
        y1 = ((mgs1 + mgs2) + mgs3);
        y1 = (y1 + 500000);
        gx = x1;
        gy = y1;
    }

    var ConvertToLocal = function (b, l) {
        WGS84ToGauss(b, l);
        LocalX = ((aa0 + (aa1 * gx)) + (aa2 * gy));
        LocalY = ((bb0 + (bb1 * gx)) + (bb2 * gy));
        return [LocalX, LocalY];
    }

    var ConverToWGS84 = function (x, y) {
        var BB, Ao, Bo, Co, D0, Eo, mCosB, B1, B2, pccm, pccn, pcct, pccr, ps, mgs1, mgs2, mgs3, mgs4, lx, y2;
        LocalToGauss(x, y);
        Ao = (((((a * (1 - e)) * ((((1 + ((3 / 4) * e)) + (((45 / 64) * e) * e)) + ((((350 / 0x0200) * e) * e) * e)) + (((((11025 / 0x4000) * e) * e) * e) * e))) * 4) * Math.atan(1)) / 180);
        Bo = (((a * (1 - e)) * (((((3 / 4) * e) + (((60 / 64) * e) * e)) + ((((525 / 0x0200) * e) * e) * e)) + (((((17640 / 0x4000) * e) * e) * e) * e))) / 2);
        Co = (((a * (1 - e)) * (((((15 / 64) * e) * e) + ((((210 / 0x0200) * e) * e) * e)) + (((((8820 / 0x4000) * e) * e) * e) * e))) / 4);
        D0 = (((a * (1 - e)) * (((((35 / 0x0200) * e) * e) * e) + (((((2520 / 0x4000) * e) * e) * e) * e))) / 6);
        Eo = (((a * (1 - e)) * (((((315 / 0x4000) * e) * e) * e) * e)) / 8);
        y2 = (gy - 500000);
        BB = (gx / Ao);
        B1 = BB;
        BB = 0;
        while ((B1 - BB) > 1E-10) {
            BB = B1;
            B1 = ((((0 - (Bo * Math.sin(((((BB * 2) * 4) * Math.atan(1)) / 180)))) + (Co * Math.sin(((((BB * 4) * 4) * Math.atan(1)) / 180)))) - (D0 * Math.sin(((((BB * 6) * 4) * Math.atan(1)) / 180)))) + (Eo * Math.sin(((((BB * 8) * 4) * Math.atan(1)) / 180))));
            B1 = ((gx - B1) / Ao);
        }
        BB = B1;
        pccn = (a / Math.sqrt((1 - ((e * Math.sin((((BB * 4) * Math.atan(1)) / 180))) * Math.sin((((BB * 4) * Math.atan(1)) / 180))))));
        pcct = Math.tan((((BB * 4) * Math.atan(1)) / 180));
        pccr = ((ee * Math.cos((((BB * 4) * Math.atan(1)) / 180))) * Math.cos((((BB * 4) * Math.atan(1)) / 180)));
        mCosB = Math.cos((((BB * 4) * Math.atan(1)) / 180));
        mgs1 = ((((((((1 + pccr) * pcct) * (y2 / pccn)) * (y2 / pccn)) / 2) * 180) / 4) / Math.atan(1));
        mgs2 = (((((((((((1 + pccr) * pcct) * (y2 / pccn)) * (y2 / pccn)) * (y2 / pccn)) * (y2 / pccn)) / 24) * (((5 + ((3 * pcct) * pcct)) + pccr) - (((9 * pccr) * pcct) * pcct))) * 180) / 4) / Math.atan(1));
        mgs3 = (((((((((((((1 + pccr) * pcct) * (y2 / pccn)) * (y2 / pccn)) * (y2 / pccn)) * (y2 / pccn)) * (y2 / pccn)) * (y2 / pccn)) / 720) * ((61 + ((90 * pcct) * pcct)) + ((((45 * pcct) * pcct) * pcct) * pcct))) * 180) / 4) / Math.atan(1));
        B = (((BB - mgs1) + mgs2) - mgs3);
        mgs1 = (((((y2 / pccn) / mCosB) * 180) / 4) / Math.atan(1));
        mgs2 = (((((((((y2 / pccn) * (y2 / pccn)) * (y2 / pccn)) / mCosB) * ((1 + ((2 * pcct) * pcct)) + pccr)) / 6) * 180) / 4) / Math.atan(1));
        mgs3 = (((((((((((y2 / pccn) * (y2 / pccn)) * (y2 / pccn)) * (y2 / pccn)) * (y2 / pccn)) / mCosB) * ((((5 + ((28 * pcct) * pcct)) + ((((24 * pcct) * pcct) * pcct) * pcct)) + (6 * pccr)) + (((8 * pccr) * pcct) * pcct))) / 120) * 180) / 4) / Math.atan(1));
        mgs4 = (((((((((((((y2 / pccn) * (y2 / pccn)) * (y2 / pccn)) * (y2 / pccn)) * (y2 / pccn)) * (y2 / pccn)) * (y2 / pccn)) / mCosB) * (((61 + ((662 * pcct) * pcct)) + ((((1320 * pcct) * pcct) * pcct) * pcct)) + ((((((720 * pccr) * pccr) * pccr) * pccr) * pccr) * pccr))) / 5040) * 180) / 4) / Math.atan(1));
        L = ((((mgs1 - mgs2) + mgs3) - mgs4) + L0);
        return [B, L];
    };


    var LocalToGauss = function (x, y) {
        gy = (((((bb1 * x) - (aa1 * y)) - (bb1 * aa0)) + (aa1 * bb0)) / ((bb1 * aa2) - (aa1 * bb2)));
        gx = (((((bb2 * x) - (aa2 * y)) - (bb2 * aa0)) + (aa2 * bb0)) / ((bb2 * aa1) - (aa2 * bb1)));
    };


    return {
        ConvertToLocal: function (b, l) {
            return ConvertToLocal(b, l);
        },
        ConverToWGS84: function (x, y) {
            return ConverToWGS84(x, y);
        }
    }
}();


